{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Image quality ranking example\n",
    "\n",
    "This is a simple example for using the image quality ranking functionality in MIPLIB. The principle is the same as in the [PyImageQualityRanking](https://github.com/sakoho81/pyimagequalityranking) package (1), but MIPLIB also contains some additional toys, e.g. Fourier Ring Correlation analysis (2) which makes it possible to expand the image quality calculation a little bit.\n",
    "\n",
    "As with the PyImageQualityRanking package you can alternatively use this functionality through a command line script. You can read more about that [here](https://github.com/sakoho81/pyimagequalityranking/wiki).\n",
    "\n",
    "---\n",
    "(1) Koho, Sami, Elnaz Fazeli, John E. Eriksson, and Pekka E. Hänninen. 2016. “Image Quality Ranking Method for Microscopy.” Scientific Reports 6 (July): 28962.\n",
    "\n",
    "(2) Koho, S. et al. Fourier ring correlation simplifies image restoration in fluorescence microscopy. Nat. Commun. 10 3103 (2019)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "import miplib.ui.cli.miplib_entry_point_options as opts\n",
    "\n",
    "from miplib.data.io import read\n",
    "import miplib.processing.image as imops\n",
    "from miplib.analysis.image_quality import image_quality_ranking as imq\n",
    "import miplib.data.iterators.fourier_ring_iterators as iterators\n",
    "\n",
    "# These are just needed to download the data from Figshare if not already available\n",
    "import urllib.request as dl\n",
    "import zipfile"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Setup\n",
    "\n",
    "Here I use the same command line options interface that is used in the *pyimq.main* script. Please refer to the Wiki, or ```pyimq.main --help``` for more details. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "args_list = (\"--use-mask --normalize-power --bin-delta=1 \" \n",
    "             \" --resolution-threshold-criterion=fixed --frc-curve-fit-type=smooth-spline \").split()\n",
    "\n",
    "options = opts.get_quality_script_options(args_list)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Check that the data directory exists, and if not, download the data from Figshare"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "path = os.path.join(os.getcwd(), \"Image_Quality_Ranking_Data\")\n",
    "\n",
    "if not os.path.exists(path):\n",
    "    os.mkdir(path)\n",
    "    zip_path = os.path.join(path, \"images.zip\")\n",
    "    dl.urlretrieve(\"https://ndownloader.figshare.com/files/20749572\", zip_path)\n",
    "    with zipfile.ZipFile(zip_path, 'r') as zip_ref:\n",
    "        zip_ref.extractall(path)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Run\n",
    "\n",
    "Now we are ready to run the script. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Done analyzing Detector_1_STED_100perc.tif\n",
      "Done analyzing Detector_1_STED_50perc.tif\n",
      "Done analyzing Detector_1_STED_60perc.tif\n",
      "Done analyzing Detector_1_STED_70perc.tif\n",
      "Done analyzing Detector_1_STED_80perc.tif\n",
      "Done analyzing Detector_1_STED_90perc.tif\n",
      "Done analyzing Detector_2_STED_100perc.tif\n",
      "Done analyzing Detector_2_STED_50perc.tif\n",
      "Done analyzing Detector_2_STED_60perc.tif\n",
      "Done analyzing Detector_2_STED_70perc.tif\n",
      "Done analyzing Detector_2_STED_80perc.tif\n",
      "Done analyzing Detector_2_STED_90perc.tif\n"
     ]
    }
   ],
   "source": [
    "df = imq.batch_evaluate_image_quality(path, options)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Evaluate\n",
    "\n",
    "The data is saved into a Pandas DataFrame. Let's first check what it looks like. There are only a few images in the dataset, so the default print will work. I would recommend *df.describe()* for anyting more involved."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Filename</th>\n",
       "      <th>tEntropy</th>\n",
       "      <th>tBrenner</th>\n",
       "      <th>fMoments</th>\n",
       "      <th>fMean</th>\n",
       "      <th>fSTD</th>\n",
       "      <th>fEntropy</th>\n",
       "      <th>fTh</th>\n",
       "      <th>fMaxPw</th>\n",
       "      <th>Skew</th>\n",
       "      <th>Kurtosis</th>\n",
       "      <th>MeanBin</th>\n",
       "      <th>Resolution</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>c:\\Temp\\Image_Quality_Ranking_Data\\Detector_1_STED_100perc.tif</td>\n",
       "      <td>4.285611</td>\n",
       "      <td>43180262.0</td>\n",
       "      <td>49.344954</td>\n",
       "      <td>10328.350177</td>\n",
       "      <td>198.187984</td>\n",
       "      <td>5.094598</td>\n",
       "      <td>3.441091e+07</td>\n",
       "      <td>10247.090423</td>\n",
       "      <td>-0.039543</td>\n",
       "      <td>-0.272079</td>\n",
       "      <td>10530.424537</td>\n",
       "      <td>0.119985</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>c:\\Temp\\Image_Quality_Ranking_Data\\Detector_1_STED_50perc.tif</td>\n",
       "      <td>4.730817</td>\n",
       "      <td>54573467.0</td>\n",
       "      <td>36.565536</td>\n",
       "      <td>10099.634840</td>\n",
       "      <td>193.568316</td>\n",
       "      <td>5.062354</td>\n",
       "      <td>3.441091e+07</td>\n",
       "      <td>10045.522567</td>\n",
       "      <td>0.016194</td>\n",
       "      <td>-0.171923</td>\n",
       "      <td>10003.404877</td>\n",
       "      <td>0.164919</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>c:\\Temp\\Image_Quality_Ranking_Data\\Detector_1_STED_60perc.tif</td>\n",
       "      <td>4.795810</td>\n",
       "      <td>54982596.0</td>\n",
       "      <td>37.439599</td>\n",
       "      <td>10120.469787</td>\n",
       "      <td>181.443549</td>\n",
       "      <td>5.195893</td>\n",
       "      <td>3.441091e+07</td>\n",
       "      <td>10114.066394</td>\n",
       "      <td>0.070219</td>\n",
       "      <td>-0.291461</td>\n",
       "      <td>10289.242332</td>\n",
       "      <td>0.158282</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>c:\\Temp\\Image_Quality_Ranking_Data\\Detector_1_STED_70perc.tif</td>\n",
       "      <td>4.603168</td>\n",
       "      <td>48760263.0</td>\n",
       "      <td>42.567657</td>\n",
       "      <td>10274.365860</td>\n",
       "      <td>213.621519</td>\n",
       "      <td>5.085422</td>\n",
       "      <td>3.441091e+07</td>\n",
       "      <td>10226.728254</td>\n",
       "      <td>-0.115382</td>\n",
       "      <td>-0.338652</td>\n",
       "      <td>10392.621445</td>\n",
       "      <td>0.139546</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>c:\\Temp\\Image_Quality_Ranking_Data\\Detector_1_STED_80perc.tif</td>\n",
       "      <td>4.580109</td>\n",
       "      <td>50641291.0</td>\n",
       "      <td>41.937592</td>\n",
       "      <td>10184.757844</td>\n",
       "      <td>182.145878</td>\n",
       "      <td>5.039310</td>\n",
       "      <td>3.441091e+07</td>\n",
       "      <td>10189.336215</td>\n",
       "      <td>0.138788</td>\n",
       "      <td>-0.254724</td>\n",
       "      <td>10402.966292</td>\n",
       "      <td>0.135971</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>c:\\Temp\\Image_Quality_Ranking_Data\\Detector_1_STED_90perc.tif</td>\n",
       "      <td>4.367668</td>\n",
       "      <td>45722663.0</td>\n",
       "      <td>46.243127</td>\n",
       "      <td>10275.311030</td>\n",
       "      <td>178.514408</td>\n",
       "      <td>5.127605</td>\n",
       "      <td>3.441091e+07</td>\n",
       "      <td>10208.036749</td>\n",
       "      <td>-0.066109</td>\n",
       "      <td>-0.215196</td>\n",
       "      <td>10439.145446</td>\n",
       "      <td>0.127693</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>c:\\Temp\\Image_Quality_Ranking_Data\\Detector_2_STED_100perc.tif</td>\n",
       "      <td>3.215201</td>\n",
       "      <td>28964592.0</td>\n",
       "      <td>78.310588</td>\n",
       "      <td>60353.834168</td>\n",
       "      <td>1082.283004</td>\n",
       "      <td>5.223152</td>\n",
       "      <td>3.441091e+07</td>\n",
       "      <td>60205.023895</td>\n",
       "      <td>-0.024671</td>\n",
       "      <td>-0.454378</td>\n",
       "      <td>59927.386978</td>\n",
       "      <td>0.149342</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>c:\\Temp\\Image_Quality_Ranking_Data\\Detector_2_STED_50perc.tif</td>\n",
       "      <td>3.605043</td>\n",
       "      <td>34375844.0</td>\n",
       "      <td>59.983093</td>\n",
       "      <td>55074.975164</td>\n",
       "      <td>989.126724</td>\n",
       "      <td>5.047844</td>\n",
       "      <td>3.441091e+07</td>\n",
       "      <td>54802.091433</td>\n",
       "      <td>-0.036091</td>\n",
       "      <td>-0.196196</td>\n",
       "      <td>53827.973087</td>\n",
       "      <td>0.189043</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>c:\\Temp\\Image_Quality_Ranking_Data\\Detector_2_STED_60perc.tif</td>\n",
       "      <td>3.578477</td>\n",
       "      <td>34131927.0</td>\n",
       "      <td>61.658737</td>\n",
       "      <td>55671.798799</td>\n",
       "      <td>955.466877</td>\n",
       "      <td>4.962645</td>\n",
       "      <td>3.441091e+07</td>\n",
       "      <td>55324.291588</td>\n",
       "      <td>0.210412</td>\n",
       "      <td>0.311979</td>\n",
       "      <td>56439.283505</td>\n",
       "      <td>0.172909</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>c:\\Temp\\Image_Quality_Ranking_Data\\Detector_2_STED_70perc.tif</td>\n",
       "      <td>3.624614</td>\n",
       "      <td>34195793.0</td>\n",
       "      <td>60.299502</td>\n",
       "      <td>54478.888632</td>\n",
       "      <td>983.583022</td>\n",
       "      <td>5.041294</td>\n",
       "      <td>3.441091e+07</td>\n",
       "      <td>54339.532782</td>\n",
       "      <td>0.245611</td>\n",
       "      <td>0.202735</td>\n",
       "      <td>55003.158593</td>\n",
       "      <td>0.157665</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>c:\\Temp\\Image_Quality_Ranking_Data\\Detector_2_STED_80perc.tif</td>\n",
       "      <td>3.470891</td>\n",
       "      <td>32429913.0</td>\n",
       "      <td>67.517521</td>\n",
       "      <td>57222.310447</td>\n",
       "      <td>1066.324564</td>\n",
       "      <td>5.012315</td>\n",
       "      <td>3.441091e+07</td>\n",
       "      <td>57215.815934</td>\n",
       "      <td>0.200798</td>\n",
       "      <td>0.015310</td>\n",
       "      <td>57867.984847</td>\n",
       "      <td>0.150416</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>c:\\Temp\\Image_Quality_Ranking_Data\\Detector_2_STED_90perc.tif</td>\n",
       "      <td>3.357066</td>\n",
       "      <td>30412258.0</td>\n",
       "      <td>73.278296</td>\n",
       "      <td>59317.666371</td>\n",
       "      <td>1001.853657</td>\n",
       "      <td>5.035076</td>\n",
       "      <td>3.441091e+07</td>\n",
       "      <td>59551.647057</td>\n",
       "      <td>-0.393376</td>\n",
       "      <td>-0.213147</td>\n",
       "      <td>59907.150371</td>\n",
       "      <td>0.147366</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                          Filename  tEntropy  \\\n",
       "0   c:\\Temp\\Image_Quality_Ranking_Data\\Detector_1_STED_100perc.tif  4.285611   \n",
       "1   c:\\Temp\\Image_Quality_Ranking_Data\\Detector_1_STED_50perc.tif   4.730817   \n",
       "2   c:\\Temp\\Image_Quality_Ranking_Data\\Detector_1_STED_60perc.tif   4.795810   \n",
       "3   c:\\Temp\\Image_Quality_Ranking_Data\\Detector_1_STED_70perc.tif   4.603168   \n",
       "4   c:\\Temp\\Image_Quality_Ranking_Data\\Detector_1_STED_80perc.tif   4.580109   \n",
       "5   c:\\Temp\\Image_Quality_Ranking_Data\\Detector_1_STED_90perc.tif   4.367668   \n",
       "6   c:\\Temp\\Image_Quality_Ranking_Data\\Detector_2_STED_100perc.tif  3.215201   \n",
       "7   c:\\Temp\\Image_Quality_Ranking_Data\\Detector_2_STED_50perc.tif   3.605043   \n",
       "8   c:\\Temp\\Image_Quality_Ranking_Data\\Detector_2_STED_60perc.tif   3.578477   \n",
       "9   c:\\Temp\\Image_Quality_Ranking_Data\\Detector_2_STED_70perc.tif   3.624614   \n",
       "10  c:\\Temp\\Image_Quality_Ranking_Data\\Detector_2_STED_80perc.tif   3.470891   \n",
       "11  c:\\Temp\\Image_Quality_Ranking_Data\\Detector_2_STED_90perc.tif   3.357066   \n",
       "\n",
       "      tBrenner   fMoments         fMean         fSTD  fEntropy           fTh  \\\n",
       "0   43180262.0  49.344954  10328.350177  198.187984   5.094598  3.441091e+07   \n",
       "1   54573467.0  36.565536  10099.634840  193.568316   5.062354  3.441091e+07   \n",
       "2   54982596.0  37.439599  10120.469787  181.443549   5.195893  3.441091e+07   \n",
       "3   48760263.0  42.567657  10274.365860  213.621519   5.085422  3.441091e+07   \n",
       "4   50641291.0  41.937592  10184.757844  182.145878   5.039310  3.441091e+07   \n",
       "5   45722663.0  46.243127  10275.311030  178.514408   5.127605  3.441091e+07   \n",
       "6   28964592.0  78.310588  60353.834168  1082.283004  5.223152  3.441091e+07   \n",
       "7   34375844.0  59.983093  55074.975164  989.126724   5.047844  3.441091e+07   \n",
       "8   34131927.0  61.658737  55671.798799  955.466877   4.962645  3.441091e+07   \n",
       "9   34195793.0  60.299502  54478.888632  983.583022   5.041294  3.441091e+07   \n",
       "10  32429913.0  67.517521  57222.310447  1066.324564  5.012315  3.441091e+07   \n",
       "11  30412258.0  73.278296  59317.666371  1001.853657  5.035076  3.441091e+07   \n",
       "\n",
       "          fMaxPw      Skew  Kurtosis       MeanBin  Resolution  \n",
       "0   10247.090423 -0.039543 -0.272079  10530.424537  0.119985    \n",
       "1   10045.522567  0.016194 -0.171923  10003.404877  0.164919    \n",
       "2   10114.066394  0.070219 -0.291461  10289.242332  0.158282    \n",
       "3   10226.728254 -0.115382 -0.338652  10392.621445  0.139546    \n",
       "4   10189.336215  0.138788 -0.254724  10402.966292  0.135971    \n",
       "5   10208.036749 -0.066109 -0.215196  10439.145446  0.127693    \n",
       "6   60205.023895 -0.024671 -0.454378  59927.386978  0.149342    \n",
       "7   54802.091433 -0.036091 -0.196196  53827.973087  0.189043    \n",
       "8   55324.291588  0.210412  0.311979  56439.283505  0.172909    \n",
       "9   54339.532782  0.245611  0.202735  55003.158593  0.157665    \n",
       "10  57215.815934  0.200798  0.015310  57867.984847  0.150416    \n",
       "11  59551.647057 -0.393376 -0.213147  59907.150371  0.147366    "
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The *batch_evaluate_image_quality()* function does not normalize the numerical values to [0, 1], so you have to do that separately, if thats what you want. Here's an example for getting that done."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_norm = df.copy()\n",
    "df_norm.iloc[:, 1:] = df.iloc[:, 1:].subtract(df.iloc[:, 1:].min(), axis=1)\n",
    "df_norm.iloc[:, 1:] = df_norm.iloc[:, 1:].divide(df_norm.iloc[:, 1:].max(), axis=1)\n",
    "\n",
    "## The resolution has to be flipped around to make sense. Do the same, e.g. tp get the invfSTD measure \n",
    "df_norm[\"Resolution\"] = 1 - df_norm[\"Resolution\"]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Utilize\n",
    "\n",
    "As a simple example here, I take a couple of parameters (Resolution and Spatial entropy) that are well known to correlate with image quality. Then I create a third parameter, by simply taking an average of the two. The images are clearly divided in two groups. On this normalized scale each paramter gets its maximum (best) value at 1."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[<matplotlib.axes._subplots.AxesSubplot object at 0x0000028EB7F55C50>,\n",
       "        <matplotlib.axes._subplots.AxesSubplot object at 0x0000028EB7F90160>,\n",
       "        <matplotlib.axes._subplots.AxesSubplot object at 0x0000028EB7FBD5C0>]], dtype=object)"
      ]
     },
     "execution_count": 88,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 648x216 with 3 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "df_norm[\"Average\"] = (df_norm[\"tEntropy\"] + df_norm[\"Resolution\"]) / 2\n",
    "\n",
    "df_res = df_norm.sort_values(by=['Average']).reset_index(drop=True)\n",
    "df_res = df_res.loc[:, [\"Average\", \"Resolution\", \"tEntropy\"]]\n",
    "                            \n",
    "df_res.plot(subplots=True, layout=(1,3), figsize=(9,3))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "So let's look, what does that mean. As it turns out, the ranking separates the two detectors that the data was acquired with. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Filename</th>\n",
       "      <th>Average</th>\n",
       "      <th>Resolution</th>\n",
       "      <th>tEntropy</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>c:\\Temp\\Image_Quality_Ranking_Data\\Detector_2_STED_50perc.tif</td>\n",
       "      <td>0.123320</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.246641</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>c:\\Temp\\Image_Quality_Ranking_Data\\Detector_2_STED_60perc.tif</td>\n",
       "      <td>0.231730</td>\n",
       "      <td>0.233628</td>\n",
       "      <td>0.229833</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>c:\\Temp\\Image_Quality_Ranking_Data\\Detector_2_STED_100perc.tif</td>\n",
       "      <td>0.287446</td>\n",
       "      <td>0.574893</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>c:\\Temp\\Image_Quality_Ranking_Data\\Detector_2_STED_90perc.tif</td>\n",
       "      <td>0.346634</td>\n",
       "      <td>0.603514</td>\n",
       "      <td>0.089754</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>c:\\Temp\\Image_Quality_Ranking_Data\\Detector_2_STED_70perc.tif</td>\n",
       "      <td>0.356695</td>\n",
       "      <td>0.454367</td>\n",
       "      <td>0.259022</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>c:\\Temp\\Image_Quality_Ranking_Data\\Detector_2_STED_80perc.tif</td>\n",
       "      <td>0.360555</td>\n",
       "      <td>0.559342</td>\n",
       "      <td>0.161767</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>c:\\Temp\\Image_Quality_Ranking_Data\\Detector_1_STED_50perc.tif</td>\n",
       "      <td>0.654102</td>\n",
       "      <td>0.349322</td>\n",
       "      <td>0.958881</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>c:\\Temp\\Image_Quality_Ranking_Data\\Detector_1_STED_60perc.tif</td>\n",
       "      <td>0.722721</td>\n",
       "      <td>0.445443</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>c:\\Temp\\Image_Quality_Ranking_Data\\Detector_1_STED_70perc.tif</td>\n",
       "      <td>0.797436</td>\n",
       "      <td>0.716750</td>\n",
       "      <td>0.878121</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>c:\\Temp\\Image_Quality_Ranking_Data\\Detector_1_STED_90perc.tif</td>\n",
       "      <td>0.808761</td>\n",
       "      <td>0.888393</td>\n",
       "      <td>0.729129</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>c:\\Temp\\Image_Quality_Ranking_Data\\Detector_1_STED_80perc.tif</td>\n",
       "      <td>0.816022</td>\n",
       "      <td>0.768512</td>\n",
       "      <td>0.863533</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>c:\\Temp\\Image_Quality_Ranking_Data\\Detector_1_STED_100perc.tif</td>\n",
       "      <td>0.838607</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.677213</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                          Filename   Average  \\\n",
       "0   c:\\Temp\\Image_Quality_Ranking_Data\\Detector_2_STED_50perc.tif   0.123320   \n",
       "1   c:\\Temp\\Image_Quality_Ranking_Data\\Detector_2_STED_60perc.tif   0.231730   \n",
       "2   c:\\Temp\\Image_Quality_Ranking_Data\\Detector_2_STED_100perc.tif  0.287446   \n",
       "3   c:\\Temp\\Image_Quality_Ranking_Data\\Detector_2_STED_90perc.tif   0.346634   \n",
       "4   c:\\Temp\\Image_Quality_Ranking_Data\\Detector_2_STED_70perc.tif   0.356695   \n",
       "5   c:\\Temp\\Image_Quality_Ranking_Data\\Detector_2_STED_80perc.tif   0.360555   \n",
       "6   c:\\Temp\\Image_Quality_Ranking_Data\\Detector_1_STED_50perc.tif   0.654102   \n",
       "7   c:\\Temp\\Image_Quality_Ranking_Data\\Detector_1_STED_60perc.tif   0.722721   \n",
       "8   c:\\Temp\\Image_Quality_Ranking_Data\\Detector_1_STED_70perc.tif   0.797436   \n",
       "9   c:\\Temp\\Image_Quality_Ranking_Data\\Detector_1_STED_90perc.tif   0.808761   \n",
       "10  c:\\Temp\\Image_Quality_Ranking_Data\\Detector_1_STED_80perc.tif   0.816022   \n",
       "11  c:\\Temp\\Image_Quality_Ranking_Data\\Detector_1_STED_100perc.tif  0.838607   \n",
       "\n",
       "    Resolution  tEntropy  \n",
       "0   0.000000    0.246641  \n",
       "1   0.233628    0.229833  \n",
       "2   0.574893    0.000000  \n",
       "3   0.603514    0.089754  \n",
       "4   0.454367    0.259022  \n",
       "5   0.559342    0.161767  \n",
       "6   0.349322    0.958881  \n",
       "7   0.445443    1.000000  \n",
       "8   0.716750    0.878121  \n",
       "9   0.888393    0.729129  \n",
       "10  0.768512    0.863533  \n",
       "11  1.000000    0.677213  "
      ]
     },
     "execution_count": 89,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.set_option('display.max_colwidth', -1)\n",
    "\n",
    "df_check = df_norm.sort_values(by=['Average']).reset_index(drop=True)\n",
    "df_check = df_check.loc[:, [\"Filename\", \"Average\", \"Resolution\", \"tEntropy\"]]\n",
    "\n",
    "df_check"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
